A.6.1. Representation of All-Day Events in vCalendar/iCalendar

The vCalendar 1.0 specification, which is widely adopted on mobile devices, does not describe a standard representation of all day events.

The OMA data synchronisation group has published a Minimum Interoperability Profile vObject which aims to provide guidance on how to interpret some ambiguous areas of the vCalendar 1.0 specification.

It recommends that all-day events should be represented using the same date for DTSTART and DTEND, with a time of 00:00:00 for DTSTART and 24:00:00 for DTEND. 24 hour events that begin at midnight should be represented using DTSTART and DTEND time of 00:00:00 and DTEND set to one day after the event. However, a time value of 24:00:00 is illegal syntax in iCalendar; the valid range for the hour value is 0 through 23.

The iCalendar specification states that the DTEND property is exclusive (i.e. the date specified in the DTEND is not included in the event duration). An event that lasts all day on June 19th 2007 should be represented as:

DTSTART;VALUE=DATE:20070619
DTSTART;VALUE=DATE:20070620

Most major Calendar implementations follow this guidance. For example, Microsoft Outlook:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
ORGANIZER:MAILTO:< omitted >
DTSTART;VALUE=DATE:20070402
DTEND;VALUE=DATE:20070403
LOCATION:London office
TRANSP:OPAQUE
SEQUENCE:0
UID:040000008200E00074C5B7101A82E00800000000E0F088CC1875C7010000000000
    000000100000008863E35F4A64624397C17A75BF6F4C4A
DTSTAMP:20070402T101937Z
SUMMARY:MS all day event\, time
PRIORITY:5
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR

For example, Google™:

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART;VALUE=DATE:20070404
DTEND;VALUE=DATE:20070405
< additional properties omitted for readability >
STATUS:CONFIRMED
SUMMARY:Birthday
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR